package com.lc.yygh.cmn.controller;

import com.lc.yygh.cmn.service.DictService;
import com.lc.yygh.common.result.Result;
import com.lc.yygh.model.cmn.Dict;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

@Api(tags = "数据字典管理")
@RestController
@RequestMapping("/admin/cmn/dict")
//@CrossOrigin  //用了GetWay来解决跨域问题就不能用这个注解了，会冲突
public class DictController {

    @Autowired
    private DictService dictService;

    //根据数据id查询子数据列表
    @ApiOperation(value = "根据数据id查询子数据列表")
    @GetMapping("/findChildData/{id}")
    public Result findChildData(@PathVariable Long id) {
        List<Dict> list = dictService.findChildData(id);
        return Result.success(list);
    }
    //导出
    @ApiOperation(value="导出")
    @GetMapping(value = "/exportData")
    public void exportData(HttpServletResponse response) {
        dictService.exportData(response);
    }

    //导入
    @ApiOperation(value = "导入")
    @PostMapping("importData")
    public Result importData(MultipartFile file) {
        dictService.importDictData(file);
        return Result.success();
    }

    //根据上级编码与值获取数据字典名称，用到方法重载，有父节点用第一个方法，没有父节点用第二个方法
    @ApiOperation(value = "获取数据字典名称")
    @GetMapping(value = "/getName/{parentDictCode}/{value}")
    public String getName(
            @ApiParam(name = "parentDictCode", value = "上级编码", required = true)
            @PathVariable("parentDictCode") String parentDictCode,

            @ApiParam(name = "value", value = "值", required = true)
            @PathVariable("value") String value) {
        return dictService.getNameByParentDictCodeAndValue(parentDictCode, value);
    }

    @ApiOperation(value = "获取数据字典名称")
    @ApiImplicitParam(name = "value", value = "值", required = true, dataType = "Long", paramType = "path")
    @GetMapping(value = "/getName/{value}")
    public String getName(
            @ApiParam(name = "value", value = "值", required = true)
            @PathVariable("value") String value) {
        return dictService.getNameByParentDictCodeAndValue("", value);
        /*这里有个注意点（第一次遇到）：之前我们写方法重载的时候，没有某个参数我们就写成null，而这里写成空串，其实写哪个都可以(前提是这个参数
        是String类型)，但是在service中的getNameByParentDictCodeAndValue方法做判断的时候就必须用isEmpty方法，因为空串也是字符串，但是
        不是null，所以会走错误的判断走向，而用isEmpty方法可以解决问题，因为空串调isEmpty方法就是true，所以注意这里有两组配合：
        如果参数是空串，就可以用isEmpty方法做判断，如果参数是null，就用==null做判断*/
    }

    //根据dictCode获取子节点
    @ApiOperation(value = "根据dictCode获取下级节点")
    @GetMapping(value = "/findByDictCode/{dictCode}")
    public Result findByDictCode(@ApiParam(name = "dictCode", value = "节点编码", required = true)
                                 @PathVariable String dictCode){
        List<Dict>list= dictService.findByDictCode(dictCode);
        return Result.success(list);
    }
}
